package top.continew.admin.generator.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.multipart.MultipartFile;
import top.continew.admin.generator.model.entity.TaskListDO;
import top.continew.admin.generator.model.entity.TaskTodoDO;
import top.continew.admin.generator.model.query.TaskListCustomQuery;
import top.continew.admin.generator.model.req.TransferHandleReq;
import top.continew.admin.system.model.req.TaskHandlerReq;
import top.continew.admin.system.model.resp.MyTaskRes;
import top.continew.admin.system.model.resp.MyTaskStatisticsRes;
import top.continew.admin.system.model.resp.ExportTaskResp;
import top.continew.starter.data.mp.service.IService;
import top.continew.starter.extension.crud.model.resp.PageResp;
import top.continew.starter.extension.crud.service.BaseService;
import top.continew.admin.generator.model.query.TaskListQuery;
import top.continew.admin.generator.model.req.TaskListReq;
import top.continew.admin.generator.model.resp.TaskListDetailResp;
import top.continew.admin.generator.model.resp.TaskListResp;

import java.util.List;

/**
 * 任务管理业务接口
 *
 * @author jiangjun
 * @since 2025/06/20 17:28
 */
public interface TaskListService extends BaseService<TaskListResp, TaskListDetailResp, TaskListQuery, TaskListReq> , IService<TaskListDO> {
    
    /**
     * 导入Excel
     *
     * @param file Excel文件
     * @return 导入结果
     */
    String importExcel(MultipartFile file);

    /**
     * 获取工作量统计
     *
     * @param provinceName 省区名称
     * @param handler 处理人
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据
     */
    Object getWorkloadStats(String provinceName, String handler, String startDate, String endDate);

    /**
     * 获取筛选选项
     *
     * @param categoryName 产品名称
     * @param spec 规格
     * @param provinceName 省区名称
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 筛选选项
     */
    Object getFilterOptions(String categoryName, String spec, String provinceName, String startDate, String endDate);

    /**
     * 根据省区获取负责人
     *
     * @param provinceName 省区名称
     * @return 负责人列表
     */
    Object getHandlersByProvince(String provinceName);
    
    /**
     * 批量修改负责人
     *
     * @param taskIds 任务ID列表
     * @param newHandlerId 新负责人 ID
     * @param newHandlerName 新负责人姓名
     */
    void batchUpdateHandler(List<String> taskIds, Long newHandlerId, String newHandlerName);

    /**
     * 根据类型查询
     * @param type：todo-待处理，done-累计已处理，today-当日已处理，month-当月已处理
     * @param pageSize
     * @param pageNum
     * @param shopName 店铺名称
     * @param categoryName 品种
     * @return
     */
    PageResp<MyTaskRes> queryByType(String type, Integer pageSize, Integer pageNum, String shopName, String categoryName);

    /**
     * 任务处理
     * @param taskHandlerReq
     */
    void taskHandler(TaskHandlerReq taskHandlerReq);

    /**
     * 我的的任务统计
     * @return
     */
    MyTaskStatisticsRes statistics();

    /**
     * 推送微信消息
     * @param task
     * @return
     */
    boolean pushWxMsg(TaskListDO task);

    /**
     * 给各省区负责人推送微信消息
     */
    void pushWxMsgToProvinceHandlers();

    /**
     * 查询任务分配表列表
     *
     * @param taskId 任务ID
     * @return 分配表列表
     */
    Object getTaskAssignments(String taskId);

    /**
     * 修改任务分配处理人
     *
     * @param assignmentId 分配表ID
     * @param data 修改数据
     */
    void updateTaskAssignment(String assignmentId, Object data);

    /**
     * 自定义分页查询
     * @param c 查询参数
     * @return
     */
    PageResp<MyTaskRes> myPageQuery(TaskListCustomQuery c);

    /**
     * 导出Excel
     * @param query 查询参数
     * @param response 响应对象
     */
    void myExport(TaskListCustomQuery query, jakarta.servlet.http.HttpServletResponse response);

    /**
     * 获取负责人列表
     * @return 负责人列表
     */
    Object getHandlers();

    /**
     * 获取导入批次列表
     * @return 批次列表
     */
    Object getBatches();
    
    /**
     * 获取搜索选项
     * @return 搜索选项
     */
    Object getSearchOptions();

    /**
     * 删除任务及其分配记录
     * @param ids 任务ID列表
     * @return 删除结果
     */
    boolean deleteTaskWithAssignments(List<Long> ids);

    /**
     * 获取产品价格分析数据
     * @param categoryName 产品名称
     * @param spec 规格
     * @param provinceName 省区名称
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 价格分析数据
     */
    Object getPriceAnalysis(String categoryName, String spec, String provinceName, String startDate, String endDate);


    /**
     * 处理转派
     * @param transferId 转派记录ID
     * @param handleResult 处理结果：2-通过，3-驳回
     * @param rejectReason 驳回原因
     */
    void handleTransfer(TransferHandleReq req);

    /**
     * 获取转派链条
     * @param taskId 任务ID
     * @return 转派链条
     */
    Object getTransferChain(Long taskId);



    /**
     * 给各省区负责人推送短信消息
     */
    void pushSmsMsgToProvinceHandlers() throws Exception;

    /**
     * 异步导出Excel
     */
    String asyncExport(TaskListCustomQuery query);

    /**
     * 获取导出任务列表
     */
    List<ExportTaskResp> getExportTasks();

    /**
     * 获取导出任务详情
     */
    ExportTaskResp getExportTask(String taskId);

    /**
     * 下载导出文件
     */
    void downloadExportFile(String taskId, jakarta.servlet.http.HttpServletResponse response);
}